VOS - Geolocatie
Geo-coördinaten
Om de dichtsbijzijnde school vinden slaan de geo-coordinaten van de scholen op voor elke school. Deze staan in het data/organisationList.json bestand:
[
{
"name": "Atheneum Irishof Campus Kapellen",
"street": "Streepstraat 16",
"postalcode": "2950",
"city": " Kapellen",
"email": "ka.kapellen@g-o.be",
"phone": "03 660 13 00",
"directie": {
"firstName": "Brigitta",
"lastName": "Verlent",
"phone": "0486788723"
},
"secretariaat": {
"phone": "0486788723"
},
"preventieadviseur": {
"firstName": "Frederic",
"lastName": "Jaminet",
"phone": "0486788723"
},
"latitude": "51.31974150000001",
"longitude": "4.424790499999972",
"distanceFromMyLocation" : 0
},
...
Geolocatie van de telefoon ophalen
Om de dichtsbijzijnde school te vinden moeten we eerst de geolocatie van de telefoon te weten komen. Hoe je de plugin gebruikt en installeert zie Cordova - Geolocation. Om de geolocatie in VOS op te halen maken we een methode met de naam getPosition
in de vos
namespace:
var vos = { /** * Geolocatie van de telefoon ophalen * */ getPosition: function () { var options = { maximumAge: 3600000, timeout: 6000, enableHighAccuracy: false } var onSuccess = function (pos) { vos.model.position.latitude = pos.coords.latitude.toFixed(4); vos.model.position.longitude = pos.coords.longitude.toFixed(4); //vos.setMyLocation(); //render.identity('#identity'); //view['home']['index'](); }; var onError = function (error) { // stel in op hoofdzetel vos.model.position.latitude = 51.1771; vos.model.position.longitude = 4.3533; //vos.setMyLocation(); //render.identity('#identity'); //view['home']['index'](); }; var watchID = navigator.geolocation.getCurrentPosition(onSuccess, onError, options); }, ...
Geolocatie opslaan
Als we geolocatie kennen slagen we die op in het model. Daarnaast berekenen we ook hoevel elke school zich bevindt van de plaats waar de gebruiker zich bevindt. Deze afstand slaan we op in de eigenschap distanceFromMyLocation
van de origanisation
. Vervlogens zoeken we de dichtsbijzijnde school. Indien de geolocatie niet gevonden kan worden retourneren we de eerste school in de lijst. De setMyLocation
methode staat ook in de vos
namespace:
var vos = { /** * De dichtsbijzijnde organisatie ophalen. * https://stackoverflow.com/questions/21279559/geolocation-closest-locationlat-long-from-my-position */ setMyLocation: function () { vos.model.organisationList.forEach(function (item) { item.distanceFromMyLocation = getDistanceFromLatLonInKm( vos.model.position.latitude, vos.model.position.longitude, item.latitude, item.longitude); }); vos.model.organisationList.sort(function (a, b) { return a.distanceFromMyLocation - b.distanceFromMyLocation; }); vos.model.organisationList.forEach( function (item) { document.getElementById("feedback").innerHTML = ''; document.getElementById("feedback").innerHTML += item.distanceFromMyLocation + ' ' + item.longitude + ' ' + item.latitude + ' ' + item.name + '<br>'; }); vos.model.myLocation = vos.model.organisationList[0]; }, ...
Deze methode roepen we op telkens wanneer de gebruiker een actie onderneemt. Dus in de controller gaan we telkens deze methode oproepen:
var controller = {
'home': {
'index': function () {
vos.getPosition();
vos.setMyLocation();
render.identity('#home .identity');
view['home']['index']();
},
De locatie wort dan in de render.identity
aan de gebruiker getoond.